#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>

void print_set(sigset_t set)
{
  int i = 1;
  for (; i < 32; i++)
  {
    if (sigismember(&set, i))
    {
      printf("%d", 1);
    }
    else
    {
      printf("%d", 0);
    }
  }
  printf("\n");
}

int main()
{
  int ret;
  sigset_t set, oldset, pendset;
  sigemptyset(&set);                           // 初始化信号集
  sigaddset(&set, SIGINT);                     // 将SIGINT加入信号集中
  ret = sigprocmask(SIG_BLOCK, &set, &oldset); // 将信号集中的信号阻塞
  if (ret < 0)
  {
    perror("sigprocmask");
    exit(1);
  }

  printf("SIGINT blocked\n"); // 阻塞后，无法响应SIGINT信号

  while (1)
  {
    sigpending(&pendset); // 获取当前进程的未决信号
    print_set(pendset);   // 输出未决信号集
    sleep(1);
  }

  return 0;
}